iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Security

身分驗證你我他 ─ 使用 HashiCorp Vault 與 Terraform 打造 Secret 與 Identity 實驗室系列 第 15 篇

Day 15. Vault Auth Methods:Application 到底如何登入 Vault

  • 分享至 

  • xImage
  •  

對於 Application 我們該如何取得Token及登入Vault?

跟人類的行為不同,應用程式不能一直輸入 Username 及 Password,因為 username 及 password 通常是敏感資訊,也因此,Hashicorp vault 提供了幾種 Auth 的方法,例如 AppRole、JWT等方式。
而 AppRole 則是比較適合應用程式獲取 Vault token的方式。

啟用 AppRole:
vault auth enable approle

查看既有auth method:
vault auth list

https://ithelp.ithome.com.tw/upload/images/20261006/20128925RIA4fBBZar.png

接著,還記得我們之前建立過的 policy 嗎? 這時候我們也需要一個用於 App 的 policy:

path "database/creds/my-role" {
    capabilities = ["read"]
}

vault policy write myapp-policy myapp-policy.hcl

有了Policy後,再建立app role 並 apply給它:

vault write auth/approle/role/myapp \
    token_policies="myapp-policy" \
    token_ttl="1h" \
    token_max_ttl="4h"

Application 怎麼拿登入資料?

取得Role:

grantli@xxx:~$ vault read auth/approle/role/myapp/role-id
Key        Value
---        -----
role_id    db82865c-fbfc-82fd-0645-794c0df1d3f8

再產生 SecretID:

vault write -f auth/approle/role/myapp/secret-id

會看到對應的資訊已經產生:
https://ithelp.ithome.com.tw/upload/images/20261006/20128925aLtodQPNx3.png

使用 role id 及 secret id 連線至 Vault

curl -k \
  --request POST \
  --data '{
    "role_id": "db82865c-fbfc-82fd-0645-794c0df1d3f8",
    "secret_id": "abf01d94-01a3-6b58-0d98-6f9a6693ac32"
  }' \
  https://127.0.0.1:8200/v1/auth/approle/login

如果看到以下輸出就代表成功了!!

{"request_id":"787481a5-740a-49a6-1e05-2b66e06e40d8","lease_id":"","renewable":false,"lease_duration":0,"data":null,"wrap_info":null,"warnings":null,"auth":{"client_token":"hvs.CAESIEN6Z2Fiz9MuCkuNsn1vNNdb1Gs03Ii9263ZdkDYv6azGh4KHGh2cy52QWM0YXFabmY5N3lpVHpkT3duZmo5NW0","accessor":"oQViaYD8aM5yHU7qrL6opOna","policies":["default","myapp-policy"],"token_policies":["default","myapp-policy"],"metadata":{"role_name":"myapp"},"lease_duration":3600,"renewable":true,"entity_id":"fc690680-999c-d027-4819-2a30f9e6dc8c","token_type":"service","orphan":true,"mfa_requirement":null,"num_uses":0},"mount_type":""}

接著,在 response 中,我們可以看到其中一個 attribute "client_token" 便是我們之後用來存取各項credential 的憑證。

hvs.CAESIEN6Z2Fiz9MuCkuNsn1vNNdb1Gs03Ii9263ZdkDYv6azGh4KHGh2cy52QWM0YXFabmY5N3lpVHpkT3duZmo5NW0

例如透過 curl 存取我們在前一天建立的 database role,就可以得到 Dynamic secret:

curl -k \
  --header "X-Vault-Token: hvs.CAESIEN6Z2Fiz9MuCkuNsn1vNNdb1Gs03Ii9263ZdkDYv6azGh4KHGh2cy52QWM0YXFabmY5N3lpVHpkT3duZmo5NW0" \
  https://127.0.0.1:8200/v1/database/creds/my-role

今天以應用程式的視角,進行驗證並 based on 對應的 policy 及 role 獲得 Vault 的 credentials,總而言之,與人不同,Application不會執行 vault login command,而是透過如 curl、http request 驗證、獲取token,進而進行進一步的行為。


上一篇
Day 14. Database Secrets Engine — 動態產生 Database Credentials
系列文
身分驗證你我他 ─ 使用 HashiCorp Vault 與 Terraform 打造 Secret 與 Identity 實驗室 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言